package org.example.flea_market_mvc.param;

import java.time.LocalDateTime;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.Data;

/**
 * 用户参数类
 * 用于接收前端传入的用户相关请求参数
 */
@Data
public class UserParam {
    @NotNull(message = "用户名不能为空")
    @Size(max = 50, message = "用户名长度不能超过50")
    private String username;      // 用户名（唯一标识）
    @NotNull(message = "用户密码不能为空")
    @Size(max = 100, message = "用户密码长度不能超过100")
    private String password;      // 加密后的用户密码
    @NotNull(message = "用户邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    @Size(max = 100, message = "用户邮箱长度不能超过100")
    private String email;         // 用户邮箱（用于登录和通知）
    @Pattern(regexp = "^[0-9]{11}$", message = "手机号码格式不正确")
    private String phone;         // 用户联系电话
    @Size(max = 200, message = "用户收货地址长度不能超过200")
    private String address;       // 用户收货地址
    @NotNull(message = "用户角色不能为空")
    // 这里假设UserRoleEnum有合理的范围，根据实际情况修改
    @Min(value = 1, message = "用户角色值无效")
    @Max(value = 3, message = "用户角色值无效")
    private Integer role;         // 用户角色（使用UserRoleEnum枚举值）
    @NotNull(message = "用户状态不能为空")
    @Min(value = 0, message = "用户状态值无效")
    @Max(value = 1, message = "用户状态值无效")
    private Integer status;       // 用户状态（1-正常，0-禁用）
    private LocalDateTime expireTime;  // 账号过期时间（用于Token或账号有效期控制）
    @NotNull(message = "积分不能为空")
    @Min(value = 0, message = "积分不能为负数")
    private Integer points;       // 积分（可用于评价、交易奖励）
    @Size(max = 500, message = "头像URL长度不能超过500")
    private String avatar;        // 头像URL
    @Size(max = 500, message = "简介长度不能超过500")
    private String profile;       // 简介（卖家展示）
}